StoreKit Framework হলো Apple এর একটি ফ্রেমওয়ার্ক, যা ডেভেলপারদের অ্যাপ্লিকেশনে In-app Purchases (IAP) ইমপ্লিমেন্ট করতে সাহায্য করে। StoreKit ব্যবহার করে অ্যাপ্লিকেশনগুলোতে বিভিন্ন ধরনের পেইড কনটেন্ট, সাবস্ক্রিপশন, বা এককালীন কেনাকাটার সুযোগ দেওয়া যায়। এটি ব্যবহার করে ডেভেলপাররা ব্যবহারকারীদের থেকে ডিজিটাল প্রোডাক্টের জন্য অর্থ গ্রহণ করতে পারে এবং সেই অনুযায়ী অ্যাপের ফিচার আনলক করতে পারে।
StoreKit Framework এর প্রকারভেদ
StoreKit ফ্রেমওয়ার্কে বিভিন্ন ধরনের In-app Purchases (IAP) সাপোর্ট করে:
- Consumable: এটি একবার কেনার পর ব্যবহারকারীর ব্যবহার অনুযায়ী একাধিকবার কেনা যায়, যেমন: ইন-গেম কারেন্সি বা এক্সট্রা লাইফ।
- Non-consumable: একবার কেনার পর এটি চিরস্থায়ীভাবে আনলক থাকে এবং ব্যবহারকারীর iCloud অ্যাকাউন্টের সাথে লিঙ্ক থাকে, যেমন: প্রিমিয়াম ফিচার বা অ্যাপের অ্যাড-ফ্রি ভার্সন।
- Auto-renewable Subscriptions: এই ধরনের সাবস্ক্রিপশন নির্দিষ্ট সময় পর পর পুনর্নবীকরণ হয়, যেমন: মিউজিক বা ভিডিও স্ট্রিমিং সার্ভিস।
- Non-renewing Subscriptions: নির্দিষ্ট সময়ের জন্য সাবস্ক্রিপশন দেয়, তবে এটি স্বয়ংক্রিয়ভাবে পুনর্নবীকরণ হয় না। ব্যবহারকারীকে পুনরায় সাবস্ক্রিপশন নিতে হয়।
In-app Purchases ইমপ্লিমেন্ট করার জন্য প্রয়োজনীয় ধাপ
Step 1: Xcode এ StoreKit ইন্টিগ্রেট করা এবং প্রোডাক্ট কনফিগার করা
- Xcode এ In-app Purchase Capability যোগ করা:
- Xcode এ আপনার প্রোজেক্ট নির্বাচন করুন এবং Signing & Capabilities ট্যাবে যান।
- + Capability বাটনে ক্লিক করুন এবং In-App Purchase সিলেক্ট করুন।
- App Store Connect এ প্রোডাক্ট কনফিগার করা:
- App Store Connect এ যান (https://appstoreconnect.apple.com) এবং আপনার অ্যাপ্লিকেশন নির্বাচন করুন।
- Features ট্যাবে যান এবং In-App Purchases সেকশনে ক্লিক করুন।
- + বাটনে ক্লিক করে নতুন প্রোডাক্ট যোগ করুন এবং প্রোডাক্ট টাইপ সিলেক্ট করুন (যেমন: Consumable বা Non-consumable)।
- প্রোডাক্টের আইডি, প্রাইসিং, এবং বিবরণ পূরণ করুন এবং প্রোডাক্ট সাবমিট করুন।
Step 2: StoreKit Framework ইমপোর্ট করা
StoreKit ব্যবহার করতে গেলে আপনার ViewController এ StoreKit Framework ইমপোর্ট করতে হবে।
import UIKit
import StoreKit
Step 3: SKProductsRequest দিয়ে প্রোডাক্টের তথ্য লোড করা
StoreKit এ ব্যবহারকারীকে প্রোডাক্টের বিস্তারিত দেখানোর জন্য আপনাকে প্রোডাক্টের তথ্য ফেচ করতে হবে।
class ViewController: UIViewController, SKProductsRequestDelegate {
var products = [SKProduct]()
override func viewDidLoad() {
super.viewDidLoad()
fetchProducts()
}
func fetchProducts() {
let productIdentifiers = Set(["com.yourapp.productID1", "com.yourapp.productID2"])
let request = SKProductsRequest(productIdentifiers: productIdentifiers)
request.delegate = self
request.start()
}
func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
products = response.products
for product in products {
print("Product available: \(product.localizedTitle) - \(product.price)")
}
}
}
ব্যাখ্যা:
- SKProductsRequest: প্রোডাক্টের তথ্য ফেচ করার জন্য একটি রিকোয়েস্ট তৈরি করা হয়েছে।
- SKProductsRequestDelegate: প্রোডাক্টের তথ্য রিসিভ করার পর প্রোডাক্টগুলোকে products অ্যারের মধ্যে স্টোর করা হয়েছে।
- productIdentifiers: অ্যাপ্লিকেশনে কনফিগার করা প্রোডাক্টের আইডি সেট করা হয়েছে, যা App Store Connect এ ম্যানেজ করা হয়েছে।
Step 4: প্রোডাক্ট কেনা (Purchasing a Product)
SKPaymentQueue এবং SKPayment ব্যবহার করে ব্যবহারকারী প্রোডাক্ট কিনতে পারে।
extension ViewController: SKPaymentTransactionObserver {
func buyProduct(_ product: SKProduct) {
if SKPaymentQueue.canMakePayments() {
let payment = SKPayment(product: product)
SKPaymentQueue.default().add(self)
SKPaymentQueue.default().add(payment)
} else {
print("User can't make payments")
}
}
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for transaction in transactions {
switch transaction.transactionState {
case .purchased:
print("Purchase successful")
SKPaymentQueue.default().finishTransaction(transaction)
case .failed:
print("Purchase failed")
SKPaymentQueue.default().finishTransaction(transaction)
case .restored:
print("Purchase restored")
SKPaymentQueue.default().finishTransaction(transaction)
default:
break
}
}
}
}
ব্যাখ্যা:
- buyProduct(_: SKProduct): এই মেথড ব্যবহার করে প্রোডাক্ট কেনার জন্য পেমেন্ট প্রক্রিয়া শুরু করা হয়।
- SKPaymentQueue.canMakePayments(): চেক করে ব্যবহারকারী পেমেন্ট করতে সক্ষম কিনা।
- paymentQueue(_:updatedTransactions:): পেমেন্টের স্টেট (যেমন:
.purchased,.failed,.restored) অনুযায়ী অ্যাকশন নেয়া হয়েছে। - SKPaymentQueue.default().finishTransaction(transaction): পেমেন্ট সম্পন্ন হওয়ার পর ট্রানজাকশন শেষ করা হয়েছে।
Step 5: রেস্টোর করা (Restoring Purchases)
Non-consumable এবং সাবস্ক্রিপশন প্রোডাক্টগুলোর জন্য রেস্টোর ফিচার যোগ করা দরকার, যাতে ব্যবহারকারীরা প্রোডাক্ট পুনরায় ব্যবহার করতে পারে।
func restorePurchases() {
SKPaymentQueue.default().restoreCompletedTransactions()
}
func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) {
print("All purchases restored")
}
ব্যাখ্যা:
- restorePurchases(): ব্যবহারকারী তাদের পূর্বের কেনাকাটা পুনরুদ্ধার করতে পারেন।
- paymentQueueRestoreCompletedTransactionsFinished(_:): সমস্ত রেস্টোর করা ট্রানজাকশনের পরে কল করা হয় এবং সাফল্যের বার্তা প্রদর্শন করে।
Step 6: প্রোডাক্ট সাবস্ক্রিপশন এবং স্টোরেজ
সাবস্ক্রিপশন এবং কেনাকাটার তথ্য সংরক্ষণ করতে UserDefaults বা Keychain ব্যবহার করা যেতে পারে, যাতে ব্যবহারকারী পরে অ্যাক্সেস করতে পারেন।
func savePurchase(for productID: String) {
UserDefaults.standard.set(true, forKey: productID)
}
func isProductPurchased(_ productID: String) -> Bool {
return UserDefaults.standard.bool(forKey: productID)
}
ব্যাখ্যা:
- savePurchase(for:): প্রোডাক্ট কেনার পর সেটিকে
UserDefaultsএ সংরক্ষণ করা হয়েছে। - isProductPurchased(_:): কোন প্রোডাক্ট আগে কেনা হয়েছে কিনা তা চেক করে।
Step 7: Purchase Validation
Apple এর Receipt Validation ব্যবহার করে পেমেন্ট ভেরিফাই করা উচিত, যাতে কোনো ধরনের ফ্রড বা পেমেন্ট সমস্যা না হয়। এটি সার্ভার-সাইড বা ডিভাইস-সাইড করা যেতে পারে।
func validateReceipt() {
guard let receiptURL = Bundle.main.appStoreReceiptURL,
let receiptData = try? Data(contentsOf: receiptURL) else { return }
// রিসিপ্ট ডেটা ভ্যালিডেশন সার্ভার-সাইড করা যাবে
}
In-app Purchases ব্যবহার করার সেরা চর্চা
- Error Handling নিশ্চিত করুন: প্রতিটি পেমেন্ট স্টেপে সঠিক এরর হ্যান্ডলিং যোগ করুন, যাতে ব্যবহারকারীরা কেনাকাটার সমস্যার সম্মুখীন হলে দ্রুত সহায়তা পান।
- প্রাইভেসি এবং সিকিউরিটি মেনে চলুন: ব্যবহারকারীর পেমেন্ট তথ্য এবং রিসিপ্ট সুরক্ষিত রাখুন এবং সার্ভার-সাইড ভেরিফিকেশন ব্যবহার করুন।
- User Interface সঠিকভাবে ডিজাইন করুন: ব্যবহারকারীদের কেনাকাটার সময় পরিষ্কার নির্দেশনা দিন এবং সাবস্ক্রিপশন বা প্রোডাক্টের সঠিক বিবরণ দিন।
- Restore Functionality নিশ্চিত করুন: Non-consumable এবং সাবস্ক্রিপশন প্রোডাক্টগুলোর জন্য রেস্টোর অপশন অবশ্যই রাখুন, যাতে ব্যবহারকারীরা তাদের পূর্বের কেনাকাটা পুনরুদ্ধার করতে পারেন।
- Testing নিশ্চিত করুন: Apple এর Sandbox Environment এবং TestFlight ব্যবহার করে StoreKit এর পেমেন্ট এবং ফিচারগুলো ভালোভাবে টেস্ট করুন।
উপসংহার
StoreKit Framework ব্যবহার করে ডেভেলপাররা iOS অ্যাপে সহজেই In-app Purchases (IAP) ইমপ্লিমেন্ট করতে পারেন। এটি ব্যবহার করে প্রোডাক্ট কেনা, সাবস্ক্রিপশন, এবং কেনাকাটার পুনরুদ্ধার করা সম্ভব। StoreKit ব্যবহার করলে ডেভেলপারদের জন্য গুরুত্বপূর্ণ হলো সঠিকভাবে পেমেন্ট প্রক্রিয়া, ভেরিফিকেশন, এবং রেস্টোর ফিচারগুলো ইমপ্লিমেন্ট করা, যাতে ব্যবহারকারীরা সঠিক অভিজ্ঞতা পান এবং অ্যাপ্লিকেশন উন্নত হয়।
Read more